﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using COFE.Core;
using COFE.Core.Filter;
using COFE.Core.Lister;
using COFE.Core.Profile;

namespace COFE.Core
{    
    /// <summary>
    /// Implements by DirectoryInfoExA, provide internal use methods and properties.
    /// </summary>
    public interface IInternalDirectoryInfoExA : IDirectoryInfo, IInternalFileSystemInfoExA
    {
        /// <summary>
        /// Return the responsible DirectoryLister for the current entries.
        /// </summary>
        IDirectoryLister DirectoryLister { get; }

        IDirectoryLister CacheDirectoryLister { get; }


        /// <summary>
        /// Return the responsible DirectoryController for the current entries.
        /// </summary>
        IDirectoryController DirectoryController { get; }


        /// <summary>
        /// Gets whether current directory is a file based FileSystem.        
        /// </summary>
        bool IsFileBasedFS { get; }

        /// <summary>
        /// Return the file if current entries is IsFileBasedFS.
        /// </summary>
        IFileInfo FileBasedFSFile { get; }
        
        /// <summary>
        /// Returns an enumerable collection of file system information in the current directory.
        /// </summary>
        /// <param name="filterStr"></param>
        /// <returns></returns>
        IEnumerable<T> EnumerateFSIs<T>(IEntryFilter[] entryFilters, IOptionFilter[] lookupFilters, EntryConstructionFlags flags) where T : IFileSystemInfo;

        ///// <summary>
        ///// Returns an enumerable collection of file information in the current directory.
        ///// </summary>
        ///// <param name="filterStr"></param>
        ///// <returns></returns>
        //IEnumerable<IFileInfo> EnumerateFiles(IEntryFilter filterStr);

        ///// <summary>
        ///// Returns an enumerable collection of directory information in the current directory.
        ///// </summary>
        ///// <param name="filterStr"></param>
        ///// <returns></returns>
        //IEnumerable<IDirectoryInfo> EnumerateDirectories(IEntryFilter filterStr);
    }
}
